#ifndef __V_STRING_H
#define __V_STRING_H

#include "vglobal.h"

C_API_BEGIN

V_DECLEAR_HANDLE(vString);

vString *vStringNew();
vString *vStringNewWithSize(size_t n);
vString *vStringNewWithString(const char *str);
vString *vStringNewWithStringLen(const char *str,size_t sz);
vString *vStringNewWithCopy(const char *str);

/**
 * @brief 返回string分配的最大长度 capacity
 * @param a_this
 * @return
 */
size_t vStringSize(vString *a_this);

/**
 * @brief 返回字符串长度
 * @param a_this
 * @return
 */
size_t vStringLength(vString *a_this);

void vStringDelete(vString *a_this);

int vStringPrepend(vString *a_this,const char *str);
int vStringAppend(vString *a_this,const char *str);

int vStringAppendf(vString *a_this,const char *format,...);
int vStringAppendn(vString *a_this,const char *str,size_t len);

int vStringEquals(vString *a_this,vString *other);

int vStringIndexof(vString *a_this,char *str);

/**
 * @brief 将a_this中的from...to的数据拷贝一份形成新的vstring
 * @param a_this
 * @param from
 * @param to
 * @return
 */
vString *vStringSlice(vString *a_this,size_t from,ssize_t to);

/**
 * @brief 释放多余内存
 * @param a_this
 * @return
 */
ssize_t vStringCompact(vString *a_this);

void vStringFill(vString *a_this,int c);
void vStringClear(vString *a_this);

/** 去掉开头的空格 */
void vStringTrimStart(vString *a_this);
/** 去掉结尾的空格 */
void vStringTrimEnd(vString *a_this);

void vStringTrim(vString *a_this);


char *vStringContent(vString *a_this);

C_API_END

#endif
